package network.fileio;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class SimpleFileServer {
	//연결된 client에게 파일을 전송해 주는 서버 프로그램
	public void startServer() throws IOException{
		ServerSocket serverSocket = null;
		Socket socket = null;
		BufferedInputStream bis = null;//FileInputStream에 추가할 필터
		BufferedOutputStream bos = null;//클라이언트와 연결된 OutputStream에 추가할 필터
		
		//1. ServerSocket - 클라이언트 연결을 대기하다 연결되면 Socket(연결점)생성
		serverSocket = new ServerSocket(5000);//매개변수로 포트번호만 준다. 그러니까 내가 몇번 포트로 서비스하겠다는걸 알려줘야 하는것.
		//포트가 충돌나는 경우 예외 발생
		
		//클라이언트 연결 대기
		try {
			System.out.println("------------------클라이언트 연결을 기다립니다-----------------------");
			socket = serverSocket.accept();//IO블록킹 발생
			System.out.println("--------------------클라이언트 연결 되었습니다.------------------------");
			
		//2. IO작업
			 //2-1. Socket으로 부터 IO stream 조회. + Filter 스트림 추가
			OutputStream os = socket.getOutputStream();
			bos = new BufferedOutputStream(os);
			bis = new BufferedInputStream(new FileInputStream("c:\\day\\iespeace.jpg"));
			//2-2. Input(bis-file) -> output(bos-client)
			int data = bis.read();//1바이트 input
			System.out.println(data);
			while (data != -1){//읽은 데이터가 있는 동안
				bos.write(data);
				
				data = bis.read();
			}
			

		}finally {//3. 연결 닫기
			if(bos != null)bos.close();
			if(bis != null)bis.close();
			if(socket != null)socket.close();
		}
		
	}
	
	
	
	public static void main(String[] args) throws IOException {
		SimpleFileServer sfs = new SimpleFileServer();
		sfs.startServer();
	}
}
